// #include <ev.h>
// #include <amqpcpp.h>
// #include <amqpcpp/libev.h>
// #include <iostream>

// int main() {
//     // 1. 初始化事件循环（libev）
//     auto *loop = ev_default_loop(0);
//     AMQP::LibEvHandler handler(loop);  // 绑定AMQP与libev[2,8](@ref)

//     // 2. 创建连接（使用默认虚拟主机和guest账户）
//     AMQP::Address address("amqp://root:xzyxzy99@localhost:5672/");
//     AMQP::TcpConnection connection(&handler, address);

//     // 3. 创建信道（Channel）
//     AMQP::TcpChannel channel(&connection);
//     channel.onError([](const char *message) {  // 全局错误处理
//         std::cerr << "Channel错误: " << message << std::endl;
//     });

//     // 4. 声明交换机（Direct类型）
//     channel.declareExchange("my_exchange", AMQP::ExchangeType::direct, AMQP::durable)
//         .onSuccess([]() { std::cout << "交换机声明成功\n"; })
//         .onError([](const char *msg) { std::cerr << "交换机错误: " << msg << "\n"; });

//     // 5. 声明持久化队列
//     channel.declareQueue("my_queue", AMQP::durable)
//         .onSuccess([](const std::string &name, uint32_t msgCount, uint32_t consumerCount) {
//             std::cout << "队列声明成功: " << name << "\n";
//         });

//     // 6. 绑定队列到交换机
//     channel.bindQueue("my_exchange", "my_queue", "my_routing_key")
//         .onSuccess([]() { std::cout << "绑定成功\n"; });

//     // 7. 生产者：发送消息
//     AMQP::Envelope env("Hello RabbitMQ!", 15);  // 消息内容+长度
//     env.setDeliveryMode(2);  // 2=持久化消息
//     channel.publish("my_exchange", "my_routing_key", env);
//     std::cout << "消息已发送\n";

//     // 8. 消费者：接收消息
//     channel.consume("my_queue", AMQP::noack)  // noack: 自动确认
//         .onReceived([](const AMQP::Message &msg, uint64_t tag, bool redelivered) {
//             std::cout << "收到消息: " << std::string(msg.body(), msg.bodySize()) << "\n";
//         });

//     // 9. 启动事件循环
//     ev_run(loop, 0);
//     return 0;
// }

// #include <ev.h>
// #include <amqpcpp.h>
// #include <amqpcpp/libev.h>
// #include <openssl/ssl.h>
// #include <openssl/opensslv.h>

// int main()
// {
//     //1. 实例化底层网络通信框架的I/O事件监控句柄
//     auto *loop = EV_DEFAULT;
//     //2. 实例化libEvHandler句柄 --- 将AMQP框架与事件监控关联起来
//     AMQP::LibEvHandler handler(loop);
//     //2.5. 实例化连接对象
//     AMQP::Address address("amqp://root:xzyxzy99@127.0.0.1:5672/");
//     AMQP::TcpConnection connection(&handler, address);
//     //3. 实例化信道对象
//     AMQP::TcpChannel channel(&connection);
//     //4. 声明交换机
//     channel.declareExchange("test-exchange", AMQP::ExchangeType::direct)
//         .onError([](const char *message) {
//             std::cout << "声明交换机失败：" << message << std::endl;
//             exit(0);
//         })
//         .onSuccess([](){
//             std::cout << "test-exchange 交换机创建成功！" << std::endl;
//         });
//     //5. 声明队列
//     channel.declareQueue("test-queue")
//         .onError([](const char *message) {
//             std::cout << "声明队列失败：" << message << std::endl;
//             exit(0);
//         })
//         .onSuccess([](){
//             std::cout << "test-queue 队列创建成功！" << std::endl;
//         });
//     //6. 针对交换机和队列进行绑定
//     channel.bindQueue("test-exchange", "test-queue", "test-queue-key")
//         .onError([](const char *message) {
//             std::cout << "test-exchange - test-queue 绑定失败：" << message << std::endl;
//             exit(0);
//         })
//         .onSuccess([](){
//             std::cout << "test-exchange - test-queue 绑定成功！" << std::endl;
//         });
//     //7. 向交换机发布消息
//     for (int i = 0; i < 10; i++) {
//         std::string msg = "Hello Bite-" + std::to_string(i);
//         bool ret = channel.publish("test-exchange", "test-queue-key", msg);
//         if (ret == false) {
//             std::cout << "publish 失败！\n";
//         }
//     }
//     //启动底层网络通信框架--开启I/O
//     ev_run(loop, 0);
//     return 0;
// }


#include "../../common/rabbitmq.hpp"


int main()
{
    InitLog(false);
    xu::MQClient mq_client("root","xzyxzy99","127.0.0.1:5672");
    mq_client.DeclareComponents("test-exchange","test-queue","test-queue-key");

    for(int i = 0; i < 10; ++i)
    {
        std::string str = "您好"; 
        bool ret = mq_client.Publish("test-exchange","test-queue-key",str);
        if(ret == false)
        {
            LOG_ERROR("发送失败");
            break;
        }
        LOG_INFO("发送成功");
        //std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    std::this_thread::sleep_for(std::chrono::seconds(1));
    return 0;
}